const errorType = require('../constants/error-types');
const service = require('../service/user.service');
const md5password = require('../utills/password-handle');     //导入加密模块

const verifyUser = async (ctx, next) => {
    const {
        name,
        password
    } = ctx.request.body; //1.获取用户名和密码


    //2.用户名和密码不能为空
    if (!name || !password) {
        const errType = new Error(errorType.NAME_OR_PASSWORD_IS_REQUIRED);
        return ctx.app.emit('error', errType, ctx);
    }

    // 3.判断这次注册的用户名是没有被注册过
    const result = await service.getUserByName(name);
    if (result.length) {
        const error = new Error(errorType.USER_ALREADY_EXISTS);
        return ctx.app.emit('error', error, ctx);
    }

    await next();
}

const handlePassword = async (ctx, next) => { //这里的加密方式我们采用的是md5加密
    const {
        password
    } = ctx.request.body; //通过解构赋值将ctx.request.body中的密码拿出来，并赋值给变量password
    ctx.request.body.password = md5password(password); //调用加密函数，将密码作为实参传递给函数，调用后将返回值赋值    
    //给ctx.request.body的password属性，以便后面的中间件使用
    await next();
}
  
module.exports = {
    verifyUser,
    handlePassword
}
